Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

433
Views
Updating State | object is not iterable (cannot read property Symbol(Symbol.iterator))

I have below JSX -

 <FormGroup>
                <Label for="exampleEmail" style={{fontWeight:"bold"}}>What is your e-mail address?</Label>
                <Input type="email" name="email" id="exampleEmail" onChange={(e)=>setStateForProperties(e)} />
            </FormGroup>
            <FormGroup>
                <Label for="examplePassword" style={{fontWeight:"bold"}}>What is your password?</Label>
                <Input type="password" name="password" id="examplePassword" onChange={(e)=>setStateForProperties(e)}/>
 </FormGroup>

State Declarations -

  const iLoginCreds ={
    userName:'',
    password:''
  }
  const [loginCreds, setLoginCredentials] = useState(iLoginCreds)

onChange Method changing state -

  function setStateForProperties(e)
  {
    alert(e.target.id);
    switch (e.target.id) {
      case 'exampleEmail':
        setLoginCredentials(...loginCreds,{
          userName:e.target.value
        
        });
            
        break;

        case 'examplePassword':
        setLoginCredentials(... loginCreds,{
          password:e.target.value
        });
    
      default:
        break;
    }
    console.log(loginCreds);
  }

Error -

When I write anything in textbox (upon onchange event trigger) , I receive an error -

TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))

enter image description here

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

You need to destruct the previous object properties and return a new object after merging with the new one.

setLoginCredentials({ ...loginCreds, ...{userName:e.target.value} })
about 4 years ago · Juan Pablo Isaza Report

0

Instead of doing this:

setLoginCredentials(...loginCreds, {
  userName:e.target.value
});

, which passes in 2 arguments to useState, you should move the curly braces to surround ...loginCreds, like so:

setLoginCredentials({...loginCreds,
  userName:e.target.value
});

You should do the same for password.

This will change only one property on the object. React Hooks useState() with Object

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!